home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 24 / CU Amiga Magazine's Super CD-ROM 24 (1998)(EMAP Images)(GB)(Track 1 of 2)[!][issue 1998-07].iso / CUCD / Utilities / vim-5.1 / src / keymap.h < prev    next >
Encoding:
C/C++ Source or Header  |  1998-03-29  |  10.6 KB  |  353 lines

  1. /* vi:set ts=8 sts=4 sw=4:
  2.  *
  3.  * VIM - Vi IMproved    by Bram Moolenaar
  4.  *
  5.  * Do ":help uganda"  in Vim to read copying and usage conditions.
  6.  * Do ":help credits" in Vim to see a list of people who contributed.
  7.  */
  8.  
  9. #define K_CCIRCM    0x1e    /* control circumflex */
  10.  
  11. /*
  12.  * For MSDOS some keys produce codes larger than 0xff. They are split into two
  13.  * chars, the first one is K_NUL (same value used in term.h).
  14.  */
  15. #define K_NUL        (0xce)        /* for MSDOS: special key follows */
  16.  
  17. /*
  18.  * Keycode definitions for special keys.
  19.  *
  20.  * Any special key code sequences are replaced by these codes.
  21.  */
  22.  
  23. /*
  24.  * K_SPECIAL is the first byte of a special key code and is always followed by
  25.  * two bytes.
  26.  * The second byte can have any value. ASCII is used for normal termcap
  27.  * entries, 0x80 and higher for special keys, see below.
  28.  * The third byte is guaranteed to be between 0x02 and 0x7f.
  29.  */
  30.  
  31. #define K_SPECIAL        (0x80)
  32.  
  33. /*
  34.  * characters 0x0000 - 0x00ff are "normal"
  35.  * characters 0x0100 - 0x01ff are used for abbreviations
  36.  * characters 0x0200 - 0xffff are special key codes
  37.  */
  38. #define IS_SPECIAL(c)        ((c) >= 0x200)
  39. #define IS_ABBR(c)        ((c) >= 0x100 && (c) < 0x200)
  40. #define ABBR_OFF        0x100
  41.  
  42. /*
  43.  * NUL cannot be in the input string, therefore it is replaced by
  44.  *    K_SPECIAL   KS_ZERO    K_FILLER
  45.  */
  46. #define KS_ZERO            255
  47.  
  48. /*
  49.  * K_SPECIAL cannot be in the input string, therefore it is replaced by
  50.  *    K_SPECIAL   KS_SPECIAL    K_FILLER
  51.  */
  52. #define KS_SPECIAL        254
  53.  
  54. /*
  55.  * KS_EXTRA is used for keys that have no termcap name
  56.  *    K_SPECIAL   KS_EXTRA    KE_xxx
  57.  */
  58. #define KS_EXTRA        253
  59.  
  60. /*
  61.  * KS_MODIFIER is used when a modifier is given for a (special) key
  62.  *    K_SPECIAL   KS_MODIFIER    bitmask
  63.  */
  64. #define KS_MODIFIER        252
  65.  
  66. /*
  67.  * These are used for the GUI
  68.  *    K_SPECIAL   KS_xxx    K_FILLER
  69.  */
  70. #define KS_MOUSE        251
  71. #define KS_MENU            250
  72. #define KS_SCROLLBAR        249
  73. #define KS_HORIZ_SCROLLBAR  248
  74.  
  75. /*
  76.  * These are used for DEC mouse
  77.  */
  78. #define KS_NETTERM_MOUSE    247
  79. #define KS_DEC_MOUSE        246
  80.  
  81. /*
  82.  * Filler used after KS_SPECIAL and others
  83.  */
  84. #define K_FILLER        ('X')
  85.  
  86. /*
  87.  * translation of three byte code "K_SPECIAL a b" into int "K_xxx" and back
  88.  */
  89. #define TERMCAP2KEY(a, b)   ((a) + ((int)(b) << 8))
  90. #define KEY2TERMCAP0(x)        ((x) & 0xff)
  91. #define KEY2TERMCAP1(x)        (((unsigned)(x) >> 8) & 0xff)
  92.  
  93. /*
  94.  * get second or third byte when translating special key code into three bytes
  95.  */
  96. #define K_SECOND(c)    ((c) == K_SPECIAL ? KS_SPECIAL : (c) == NUL ? KS_ZERO : KEY2TERMCAP0(c))
  97.  
  98. #define K_THIRD(c)    (((c) == K_SPECIAL || (c) == NUL) ? K_FILLER : KEY2TERMCAP1(c))
  99.  
  100. /*
  101.  * get single int code from second byte after K_SPECIAL
  102.  */
  103. #define TO_SPECIAL(a, b)    ((a) == KS_SPECIAL ? K_SPECIAL : (a) == KS_ZERO ? K_ZERO : TERMCAP2KEY(a, b))
  104.  
  105. /*
  106.  * Codes for keys that do not have a termcap name.
  107.  *
  108.  * K_SPECIAL KS_EXTRA KE_xxx
  109.  */
  110. enum key_extra
  111. {
  112.     KE_NAME = 3,    /* name of this terminal entry */
  113.  
  114.     KE_S_UP,        /* shift-up */
  115.     KE_S_DOWN,        /* shift-down */
  116.  
  117.     KE_S_F1,        /* shifted function keys */
  118.     KE_S_F2,
  119.     KE_S_F3,
  120.     KE_S_F4,
  121.     KE_S_F5,
  122.     KE_S_F6,
  123.     KE_S_F7,
  124.     KE_S_F8,
  125.     KE_S_F9,
  126.     KE_S_F10,
  127.  
  128.     KE_S_F11,
  129.     KE_S_F12,
  130.     KE_S_F13,
  131.     KE_S_F14,
  132.     KE_S_F15,
  133.     KE_S_F16,
  134.     KE_S_F17,
  135.     KE_S_F18,
  136.     KE_S_F19,
  137.     KE_S_F20,
  138.  
  139.     KE_S_F21,
  140.     KE_S_F22,
  141.     KE_S_F23,
  142.     KE_S_F24,
  143.     KE_S_F25,
  144.     KE_S_F26,
  145.     KE_S_F27,
  146.     KE_S_F28,
  147.     KE_S_F29,
  148.     KE_S_F30,
  149.  
  150.     KE_S_F31,
  151.     KE_S_F32,
  152.     KE_S_F33,
  153.     KE_S_F34,
  154.     KE_S_F35,
  155.  
  156.     KE_MOUSE,        /* mouse event start */
  157.  
  158. /*
  159.  * Symbols for pseudo keys which are translated from the real key symbols
  160.  * above.
  161.  */
  162.     KE_LEFTMOUSE,    /* Left mouse button click */
  163.     KE_LEFTDRAG,    /* Drag with left mouse button down */
  164.     KE_LEFTRELEASE,    /* Left mouse button release */
  165.     KE_MIDDLEMOUSE,    /* Middle mouse button click */
  166.     KE_MIDDLEDRAG,    /* Drag with middle mouse button down */
  167.     KE_MIDDLERELEASE,    /* Middle mouse button release */
  168.     KE_RIGHTMOUSE,    /* Right mouse button click */
  169.     KE_RIGHTDRAG,    /* Drag with right mouse button down */
  170.     KE_RIGHTRELEASE,    /* Right mouse button release */
  171.  
  172.     KE_IGNORE,        /* Ignored mouse drag/release */
  173.  
  174.     KE_TAB,        /* unshifted TAB key */
  175.     KE_S_TAB,        /* shifted TAB key */
  176.  
  177.     KE_SNIFF,        /* SNiFF+ input waiting */
  178.  
  179.     KE_XF1,        /* extra vt100 function keys for xterm */
  180.     KE_XF2,
  181.     KE_XF3,
  182.     KE_XF4
  183. };
  184.  
  185. /*
  186.  * the three byte codes are replaced with the following int when using vgetc()
  187.  */
  188. #define K_ZERO        TERMCAP2KEY(KS_ZERO, K_FILLER)
  189.  
  190. #define K_UP        TERMCAP2KEY('k', 'u')
  191. #define K_DOWN        TERMCAP2KEY('k', 'd')
  192. #define K_LEFT        TERMCAP2KEY('k', 'l')
  193. #define K_RIGHT        TERMCAP2KEY('k', 'r')
  194. #define K_S_UP        TERMCAP2KEY(KS_EXTRA, KE_S_UP)
  195. #define K_S_DOWN    TERMCAP2KEY(KS_EXTRA, KE_S_DOWN)
  196. #define K_S_LEFT    TERMCAP2KEY('#', '4')
  197. #define K_S_RIGHT    TERMCAP2KEY('%', 'i')
  198. #define K_TAB        TERMCAP2KEY(KS_EXTRA, KE_TAB)
  199. #define K_S_TAB        TERMCAP2KEY(KS_EXTRA, KE_S_TAB)
  200.  
  201. /* extra set of function keys F1-F4, for vt100 compatible xterm */
  202. #define K_XF1        TERMCAP2KEY(KS_EXTRA, KE_XF1)
  203. #define K_XF2        TERMCAP2KEY(KS_EXTRA, KE_XF2)
  204. #define K_XF3        TERMCAP2KEY(KS_EXTRA, KE_XF3)
  205. #define K_XF4        TERMCAP2KEY(KS_EXTRA, KE_XF4)
  206.  
  207. #define K_F1        TERMCAP2KEY('k', '1')    /* function keys */
  208. #define K_F2        TERMCAP2KEY('k', '2')
  209. #define K_F3        TERMCAP2KEY('k', '3')
  210. #define K_F4        TERMCAP2KEY('k', '4')
  211. #define K_F5        TERMCAP2KEY('k', '5')
  212. #define K_F6        TERMCAP2KEY('k', '6')
  213. #define K_F7        TERMCAP2KEY('k', '7')
  214. #define K_F8        TERMCAP2KEY('k', '8')
  215. #define K_F9        TERMCAP2KEY('k', '9')
  216. #define K_F10        TERMCAP2KEY('k', ';')
  217.  
  218. #define K_F11        TERMCAP2KEY('F', '1')
  219. #define K_F12        TERMCAP2KEY('F', '2')
  220. #define K_F13        TERMCAP2KEY('F', '3')
  221. #define K_F14        TERMCAP2KEY('F', '4')
  222. #define K_F15        TERMCAP2KEY('F', '5')
  223. #define K_F16        TERMCAP2KEY('F', '6')
  224. #define K_F17        TERMCAP2KEY('F', '7')
  225. #define K_F18        TERMCAP2KEY('F', '8')
  226. #define K_F19        TERMCAP2KEY('F', '9')
  227. #define K_F20        TERMCAP2KEY('F', 'A')
  228.  
  229. #define K_F21        TERMCAP2KEY('F', 'B')
  230. #define K_F22        TERMCAP2KEY('F', 'C')
  231. #define K_F23        TERMCAP2KEY('F', 'D')
  232. #define K_F24        TERMCAP2KEY('F', 'E')
  233. #define K_F25        TERMCAP2KEY('F', 'F')
  234. #define K_F26        TERMCAP2KEY('F', 'G')
  235. #define K_F27        TERMCAP2KEY('F', 'H')
  236. #define K_F28        TERMCAP2KEY('F', 'I')
  237. #define K_F29        TERMCAP2KEY('F', 'J')
  238. #define K_F30        TERMCAP2KEY('F', 'K')
  239.  
  240. #define K_F31        TERMCAP2KEY('F', 'L')
  241. #define K_F32        TERMCAP2KEY('F', 'M')
  242. #define K_F33        TERMCAP2KEY('F', 'N')
  243. #define K_F34        TERMCAP2KEY('F', 'O')
  244. #define K_F35        TERMCAP2KEY('F', 'P')
  245.  
  246. #define K_S_F1        TERMCAP2KEY(KS_EXTRA, KE_S_F1)    /* shifted func. keys */
  247. #define K_S_F2        TERMCAP2KEY(KS_EXTRA, KE_S_F2)
  248. #define K_S_F3        TERMCAP2KEY(KS_EXTRA, KE_S_F3)
  249. #define K_S_F4        TERMCAP2KEY(KS_EXTRA, KE_S_F4)
  250. #define K_S_F5        TERMCAP2KEY(KS_EXTRA, KE_S_F5)
  251. #define K_S_F6        TERMCAP2KEY(KS_EXTRA, KE_S_F6)
  252. #define K_S_F7        TERMCAP2KEY(KS_EXTRA, KE_S_F7)
  253. #define K_S_F8        TERMCAP2KEY(KS_EXTRA, KE_S_F8)
  254. #define K_S_F9        TERMCAP2KEY(KS_EXTRA, KE_S_F9)
  255. #define K_S_F10        TERMCAP2KEY(KS_EXTRA, KE_S_F10)
  256.  
  257. #define K_S_F11        TERMCAP2KEY(KS_EXTRA, KE_S_F11)
  258. #define K_S_F12        TERMCAP2KEY(KS_EXTRA, KE_S_F12)
  259. #define K_S_F13        TERMCAP2KEY(KS_EXTRA, KE_S_F13)
  260. #define K_S_F14        TERMCAP2KEY(KS_EXTRA, KE_S_F14)
  261. #define K_S_F15        TERMCAP2KEY(KS_EXTRA, KE_S_F15)
  262. #define K_S_F16        TERMCAP2KEY(KS_EXTRA, KE_S_F16)
  263. #define K_S_F17        TERMCAP2KEY(KS_EXTRA, KE_S_F17)
  264. #define K_S_F18        TERMCAP2KEY(KS_EXTRA, KE_S_F18)
  265. #define K_S_F19        TERMCAP2KEY(KS_EXTRA, KE_S_F19)
  266. #define K_S_F20        TERMCAP2KEY(KS_EXTRA, KE_S_F20)
  267.  
  268. #define K_S_F21        TERMCAP2KEY(KS_EXTRA, KE_S_F21)
  269. #define K_S_F22        TERMCAP2KEY(KS_EXTRA, KE_S_F22)
  270. #define K_S_F23        TERMCAP2KEY(KS_EXTRA, KE_S_F23)
  271. #define K_S_F24        TERMCAP2KEY(KS_EXTRA, KE_S_F24)
  272. #define K_S_F25        TERMCAP2KEY(KS_EXTRA, KE_S_F25)
  273. #define K_S_F26        TERMCAP2KEY(KS_EXTRA, KE_S_F26)
  274. #define K_S_F27        TERMCAP2KEY(KS_EXTRA, KE_S_F27)
  275. #define K_S_F28        TERMCAP2KEY(KS_EXTRA, KE_S_F28)
  276. #define K_S_F29        TERMCAP2KEY(KS_EXTRA, KE_S_F29)
  277. #define K_S_F30        TERMCAP2KEY(KS_EXTRA, KE_S_F30)
  278.  
  279. #define K_S_F31        TERMCAP2KEY(KS_EXTRA, KE_S_F31)
  280. #define K_S_F32        TERMCAP2KEY(KS_EXTRA, KE_S_F32)
  281. #define K_S_F33        TERMCAP2KEY(KS_EXTRA, KE_S_F33)
  282. #define K_S_F34        TERMCAP2KEY(KS_EXTRA, KE_S_F34)
  283. #define K_S_F35        TERMCAP2KEY(KS_EXTRA, KE_S_F35)
  284.  
  285. #define K_HELP        TERMCAP2KEY('%', '1')
  286. #define K_UNDO        TERMCAP2KEY('&', '8')
  287.  
  288. #define K_BS        TERMCAP2KEY('k', 'b')
  289.  
  290. #define K_INS        TERMCAP2KEY('k', 'I')
  291. #define K_DEL        TERMCAP2KEY('k', 'D')
  292. #define K_HOME        TERMCAP2KEY('k', 'h')
  293. #define K_END        TERMCAP2KEY('@', '7')
  294. #define K_PAGEUP    TERMCAP2KEY('k', 'P')
  295. #define K_PAGEDOWN    TERMCAP2KEY('k', 'N')
  296. #define K_KHOME        TERMCAP2KEY('K', '1')    /* keypad home (upper left) */
  297. #define K_KEND        TERMCAP2KEY('K', '4')    /* keypad end (lower left) */
  298. #define K_KPAGEUP    TERMCAP2KEY('K', '3')    /* keypad pageup (upper R.) */
  299. #define K_KPAGEDOWN    TERMCAP2KEY('K', '5')    /* keypad pagedown (lower R.) */
  300.  
  301. #define K_MOUSE        TERMCAP2KEY(KS_MOUSE, K_FILLER)
  302. #define K_MENU        TERMCAP2KEY(KS_MENU, K_FILLER)
  303. #define K_SCROLLBAR    TERMCAP2KEY(KS_SCROLLBAR, K_FILLER)
  304. #define K_HORIZ_SCROLLBAR   TERMCAP2KEY(KS_HORIZ_SCROLLBAR, K_FILLER)
  305.  
  306. /*
  307.  * Symbols for pseudo keys which are translated from the real key symbols
  308.  * above.
  309.  */
  310. #define K_LEFTMOUSE        TERMCAP2KEY(KS_EXTRA, KE_LEFTMOUSE)
  311. #define K_LEFTDRAG        TERMCAP2KEY(KS_EXTRA, KE_LEFTDRAG)
  312. #define K_LEFTRELEASE        TERMCAP2KEY(KS_EXTRA, KE_LEFTRELEASE)
  313. #define K_MIDDLEMOUSE        TERMCAP2KEY(KS_EXTRA, KE_MIDDLEMOUSE)
  314. #define K_MIDDLEDRAG        TERMCAP2KEY(KS_EXTRA, KE_MIDDLEDRAG)
  315. #define K_MIDDLERELEASE        TERMCAP2KEY(KS_EXTRA, KE_MIDDLERELEASE)
  316. #define K_RIGHTMOUSE        TERMCAP2KEY(KS_EXTRA, KE_RIGHTMOUSE)
  317. #define K_RIGHTDRAG        TERMCAP2KEY(KS_EXTRA, KE_RIGHTDRAG)
  318. #define K_RIGHTRELEASE        TERMCAP2KEY(KS_EXTRA, KE_RIGHTRELEASE)
  319.  
  320. #define K_IGNORE        TERMCAP2KEY(KS_EXTRA, KE_IGNORE)
  321.  
  322. #define K_SNIFF            TERMCAP2KEY(KS_EXTRA, KE_SNIFF)
  323.  
  324. /* Bits for modifier mask */
  325. /* 0x01 cannot be used, because the modifier must be 0x02 or higher */
  326. #define MOD_MASK_SHIFT        0x02
  327. #define MOD_MASK_CTRL        0x04
  328. #define MOD_MASK_ALT        0x08
  329. #define MOD_MASK_2CLICK        0x10
  330. #define MOD_MASK_3CLICK        0x20
  331. #define MOD_MASK_4CLICK        0x40
  332. #ifdef macintosh
  333. # define MOD_MASK_CMD        0x80
  334. #endif
  335.  
  336. #define MOD_MASK_MULTI_CLICK    (MOD_MASK_2CLICK|MOD_MASK_3CLICK|MOD_MASK_4CLICK)
  337.  
  338. /*
  339.  * The length of the longest special key name, including modifiers.
  340.  * Current longest is <M-C-S-4-MiddleRelease> (length includes '<' and '>').
  341.  */
  342. #define MAX_KEY_NAME_LEN    23
  343.  
  344. /* Maximum length of a special key event as tokens.  This includes modifiers.
  345.  * The longest event is something like <M-C-S-4-LeftDrag> which would be the
  346.  * following string of tokens:
  347.  *
  348.  * <K_SPECIAL> <KS_MODIFIER> bitmask <K_SPECIAL> <KS_EXTRA> <KT_LEFTDRAG>.
  349.  *
  350.  * This is a total of 6 tokens, and is currently the longest one possible.
  351.  */
  352. #define MAX_KEY_CODE_LEN    6
  353.